package com.anolesoft.amljmes.billing.service.impl;

import java.util.List;
import java.util.UUID;

import com.anolesoft.common.core.domain.LoginUser;
import com.anolesoft.yr.util.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.anolesoft.amljmes.billing.dto.AmBillingCondition;
import com.anolesoft.amljmes.billing.dto.AmBillingInfoDO;
import com.anolesoft.amljmes.billing.dto.AmBillingInfoDTO;
import com.anolesoft.amljmes.billing.dto.EmpInfoDTO;
import com.anolesoft.amljmes.billing.service.AmBillingInfoService;
import com.anolesoft.amljmes.billing.service.mapper.AmBillingInfoServiceMapper;
//import com.anolesoft.yr.mbus.util.GlobalLoginInfo;
import com.anolesoft.yr.mbus.util.StrCP;
import com.anolesoft.yr.util.PageData;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@Service
public class AmBillingInfoServiceImpl implements AmBillingInfoService {

	@Autowired
	AmBillingInfoServiceMapper amBillingInfoServiceMapper;

	//查询开单信息不分页
	@Override
	public List<AmBillingInfoDTO> queryAllByConditon(AmBillingCondition amBilingCondition) {
		List<AmBillingInfoDTO> amBillingInfoDTOs = amBillingInfoServiceMapper.queryAllByConditon(amBilingCondition);
		return amBillingInfoDTOs;
	}

	//查询开单信息
	@Override
	public PageData<List<AmBillingInfoDTO>> queryAmBillingInfo(AmBillingCondition amBilingCondition) {
		amBilingCondition.setFactoryId( SecurityUtils.getLoginUser().getFacCode());
		Page<AmBillingInfoDTO> page= new Page<>(amBilingCondition.getPageNo(), amBilingCondition.getPageSize());
		List<AmBillingInfoDTO> amBillingInfoDTOs;
		if(amBilingCondition.getQueryType()==1){
			amBillingInfoDTOs = amBillingInfoServiceMapper.queryAmBillingInfoDTOs2(amBilingCondition, page);
		}else {
			amBillingInfoDTOs = amBillingInfoServiceMapper.queryAmBillingInfoDTOs(amBilingCondition, page);
		}
		System.out.println(">>>>:"+amBillingInfoDTOs.toString());
		return new PageData<>(((int) page.getTotal()), amBillingInfoDTOs);
	}
	//通过制造记录条码查询制造记录信息
	@Override
	public AmBillingInfoDTO queryMesOrderTraceInfo(AmBillingCondition amBillingCondition) {
		//判断该条码是否存在已开单状态
		int count = amBillingInfoServiceMapper.queryCountBypacrnoAndReceivestate(amBillingCondition.getPacrNo(),0);
		if(count!=0){
			throw new RuntimeException("该条码存在已开单数据，不应再次开单");
		}
		LoginUser loginUser = SecurityUtils.getLoginUser();
		String facCode = loginUser.getFacCode();
		AmBillingInfoDTO amBillingInfoDTO = amBillingInfoServiceMapper.queryMesOrderTraceInfo(amBillingCondition,facCode);
		return amBillingInfoDTO;
	}
	//新增开单信息
	@Override
	public int insertAmBillingInfo(List<AmBillingInfoDTO> amBillingInfoDTOs) {
//		EmpInfoDTO empInfo = amBillingInfoServiceMapper.queryEmpInfo(GlobalLoginInfo.getGlobalLoginUser());
		LoginUser loginUser = SecurityUtils.getLoginUser();
		int count = 0;
		for (AmBillingInfoDTO amBillingInfoDTO : amBillingInfoDTOs) {

			AmBillingInfoDO amBillingInfoDO = new AmBillingInfoDO();
			BeanUtils.copyProperties(amBillingInfoDTO, amBillingInfoDO);//GlobalLoginInfo.getGlobalLoginUser()
			amBillingInfoDO.setObjuid(StrCP.createObjuid32(UUID.randomUUID().toString()));
//			amBillingInfoDO.setBillingUser(GlobalLoginInfo.getGlobalLoginUser());
//			amBillingInfoDO.setBillingDeft(empInfo.getDeptUid());
			amBillingInfoDO.setBillingUser(loginUser.getEmpUid());
			amBillingInfoDO.setBillingDeft(loginUser.getDeptUid());
			amBillingInfoDO.setFactoryId(loginUser.getFacCode());
			amBillingInfoDO.setCUser(loginUser.getEmpUid());
			amBillingInfoDO.setReceiveState("0");
//			amBillingInfoDO.setBillingNotes();

			count += amBillingInfoServiceMapper.insertAmBillingInfo(amBillingInfoDO);
			amBillingInfoServiceMapper.updateDjz(amBillingInfoDO.getPacrNo());

		}
		return count;
	}
	//通过制造记录条码查询已经开单但未接单的信息
	@Override
	public AmBillingInfoDTO queryReceiveAmBillingInfo(AmBillingCondition amBillingCondition) {
		return amBillingInfoServiceMapper.queryReceiveAmBillingInfo(amBillingCondition);
	}
	//撤回已开单但是未接单的开单信息
	@Override
	public int deleteAmBillingInfoRecall(List<AmBillingInfoDTO> amBillingInfoDTOs) {
		for (AmBillingInfoDTO amBillingInfoDTO : amBillingInfoDTOs) {
			AmBillingInfoDO amBillingInfoDO = new AmBillingInfoDO();
			BeanUtils.copyProperties(amBillingInfoDTO, amBillingInfoDO);//GlobalLoginInfo.getGlobalLoginUser()
			amBillingInfoServiceMapper.deleteAmBillingInfoRecall(amBillingInfoDO);
		}
		return 0;
	}
	//接单
	@Override
	public int updateAmbillingInfoReceive(List<AmBillingInfoDTO> amBillingInfoDTOs) {
//		EmpInfoDTO empInfo = amBillingInfoServiceMapper.queryEmpInfo(GlobalLoginInfo.getGlobalLoginUser());
		LoginUser loginUser = SecurityUtils.getLoginUser();
		for (AmBillingInfoDTO amBillingInfoDTO : amBillingInfoDTOs) {
			AmBillingInfoDO amBillingInfoDO = new AmBillingInfoDO();
			BeanUtils.copyProperties(amBillingInfoDTO, amBillingInfoDO);//GlobalLoginInfo.getGlobalLoginUser()
			amBillingInfoDO.setReceiveUser(loginUser.getEmpUid());
			amBillingInfoDO.setReceiveState("10");//接单为10
			amBillingInfoDO.setReceiveDept(loginUser.getDeptUid());
			amBillingInfoDO.setFactoryId(loginUser.getFacCode());
			amBillingInfoDO.setMUser(loginUser.getEmpUid());
			amBillingInfoServiceMapper.updateAmbillingInfoReceive(amBillingInfoDO);
		}
		return 0;
	}
	//接单-拒绝
	@Override
	public int updateAmbillingInfoRefuse(List<AmBillingInfoDTO> amBillingInfoDTOs) {
//		EmpInfoDTO empInfo = amBillingInfoServiceMapper.queryEmpInfo(GlobalLoginInfo.getGlobalLoginUser());
		LoginUser loginUser = SecurityUtils.getLoginUser();
		for (AmBillingInfoDTO amBillingInfoDTO : amBillingInfoDTOs) {
			AmBillingInfoDO amBillingInfoDO = new AmBillingInfoDO();
			BeanUtils.copyProperties(amBillingInfoDTO, amBillingInfoDO);//GlobalLoginInfo.getGlobalLoginUser()
			amBillingInfoDO.setReceiveUser(loginUser.getEmpUid());
			amBillingInfoDO.setReceiveState("15");//拒绝为15
			amBillingInfoDO.setReceiveDept(loginUser.getDeptUid());
			amBillingInfoDO.setFactoryId(loginUser.getFacCode());
			amBillingInfoDO.setMUser(loginUser.getEmpUid());
			amBillingInfoServiceMapper.updateAmbillingInfoRefuse(amBillingInfoDO);
		}
		return 0;
	}
	//撤回已开单但是未接单的开单信息
	@Override
	public int deleteAmBillingInfoRecallSingle(String objuid) {
		amBillingInfoServiceMapper.deleteAmBillingInfoRecallSingle(objuid);
		return 0;
	}
	//接单-查询
	@Override
	public AmBillingInfoDTO queryBillingInfoByPacrNo(String pacrNo) {	
		return amBillingInfoServiceMapper.queryBillingInfoByPacrNo(pacrNo);
	}

	@Override
	public int revertAmbillingInfo(AmBillingInfoDTO amBillingInfoDTO) {
		AmBillingInfoDO amBillingInfoDO = new AmBillingInfoDO();
		BeanUtils.copyProperties(amBillingInfoDTO, amBillingInfoDO);
		amBillingInfoDO.setReceiveState("5");//撤回
		LoginUser loginUser = SecurityUtils.getLoginUser();
		amBillingInfoDO.setMUser(loginUser.getEmpUid());
		amBillingInfoServiceMapper.updateAmbillingInfoRevert(amBillingInfoDO);
		return 0;
	}

	@Override
	public int revertAmbillingInfoBatch(List<AmBillingInfoDTO> list) {
		for (AmBillingInfoDTO amBillingInfoDTO : list) {
			AmBillingInfoDO amBillingInfoDO = new AmBillingInfoDO();
			BeanUtils.copyProperties(amBillingInfoDTO, amBillingInfoDO);
			amBillingInfoDO.setReceiveState("5");//撤回
			LoginUser loginUser = SecurityUtils.getLoginUser();
			amBillingInfoDO.setMUser(loginUser.getEmpUid());
			amBillingInfoServiceMapper.updateAmbillingInfoRevert(amBillingInfoDO);
		}
		return 0;
	}

}
